package top.itbook;

import java.util.concurrent.TimeUnit;

/**
 * 防止刚清理后又一次输入了密码但是没有显示调用gc以通知尽快进行垃圾清理的情况所以这个类定时循环执行通知jvm进行垃圾清理的行为
 */
public class Gc extends Thread{
    private static boolean state = true; // 是否运行循环的变量 多循环一次无所谓，可以不加线程锁
    public static void gc(){
        while(state){
            System.gc();
            System.runFinalization();
            // 停顿1分钟
            try {
                TimeUnit.MINUTES.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void setState(boolean state){
        Gc.state = state;
    }

    // 重写run方法，也就是当线程被启动时，这个线程执行什么内容
    @Override
    public void run() {
        gc();
    }
}
